diff options
Diffstat (limited to 'app/[lng]/evcp/(evcp)/(system)')
16 files changed, 125 insertions, 64 deletions
diff --git a/app/[lng]/evcp/(evcp)/(system)/approval/line/page.tsx b/app/[lng]/evcp/(evcp)/(system)/approval/line/page.tsx index 2e96b434..0e227e0b 100644 --- a/app/[lng]/evcp/(evcp)/(system)/approval/line/page.tsx +++ b/app/[lng]/evcp/(evcp)/(system)/approval/line/page.tsx @@ -9,16 +9,21 @@ import { getApprovalLineList } from '@/lib/approval-line/service'; import { SearchParamsApprovalLineCache } from '@/lib/approval-line/validations'; import { ApprovalLineTable } from '@/lib/approval-line/table/approval-line-table'; +import { useTranslation } from "@/i18n"; + export const metadata: Metadata = { title: '결재선 관리', description: '결재용 결재선을 관리합니다.', }; interface PageProps { + params: Promise<{ lng: string }>; searchParams: Promise<SearchParams>; } export default async function ApprovalLinePage(props: PageProps) { + const { lng } = await props.params + const { t } = await useTranslation(lng, 'menu') const searchParams = await props.searchParams; const search = SearchParamsApprovalLineCache.parse(searchParams); // getValidFilters 반환값이 undefined 인 경우 폴백 @@ -37,7 +42,7 @@ export default async function ApprovalLinePage(props: PageProps) { <div className="flex items-center justify-between space-y-2"> <div> <div className="flex items-center gap-2"> - <h2 className="text-2xl font-bold tracking-tight">결재선 관리</h2> + <h2 className="text-2xl font-bold tracking-tight">{t('menu.information_system.approval_line')}</h2> </div> </div> </div> diff --git a/app/[lng]/evcp/(evcp)/(system)/approval/log/page.tsx b/app/[lng]/evcp/(evcp)/(system)/approval/log/page.tsx index f5b069df..d6ab6282 100644 --- a/app/[lng]/evcp/(evcp)/(system)/approval/log/page.tsx +++ b/app/[lng]/evcp/(evcp)/(system)/approval/log/page.tsx @@ -5,8 +5,16 @@ import { Skeleton } from "@/components/ui/skeleton"; import { ApprovalLogTable } from "@/lib/approval-log/table/approval-log-table"; import { getApprovalLogList } from "@/lib/approval-log/service"; import React from "react"; +import { useTranslation } from "@/i18n"; + +interface approvalLogPageProps { + params: Promise<{ lng: string }> +} + +export default async function ApprovalLogPage({ params }: approvalLogPageProps) { + const { lng } = await params + const { t } = await useTranslation(lng, 'menu') -export default async function ApprovalLogPage() { // 기본 데이터 조회 (첫 페이지, 기본 정렬) const promises = Promise.all([ getApprovalLogList({ @@ -23,7 +31,7 @@ export default async function ApprovalLogPage() { <div> <div className="flex items-center gap-2"> <h2 className="text-2xl font-bold tracking-tight"> - 결재 로그 + {t('menu.information_system.approval_log')} </h2> <InformationButton pagePath="evcp/approval/log" /> </div> @@ -46,4 +54,4 @@ export default async function ApprovalLogPage() { </React.Suspense> </Shell> ) -}
\ No newline at end of file +} diff --git a/app/[lng]/evcp/(evcp)/(system)/approval/template/page.tsx b/app/[lng]/evcp/(evcp)/(system)/approval/template/page.tsx index c5834b05..91118d90 100644 --- a/app/[lng]/evcp/(evcp)/(system)/approval/template/page.tsx +++ b/app/[lng]/evcp/(evcp)/(system)/approval/template/page.tsx @@ -8,6 +8,7 @@ import { getValidFilters } from '@/lib/data-table'; import { getApprovalTemplateList } from '@/lib/approval-template/service'; import { SearchParamsApprovalTemplateCache } from '@/lib/approval-template/validations'; import { ApprovalTemplateTable } from '@/lib/approval-template/table/approval-template-table'; +import { useTranslation } from "@/i18n"; export const metadata: Metadata = { title: '결재 템플릿 관리', @@ -15,10 +16,13 @@ export const metadata: Metadata = { }; interface PageProps { + params: Promise<{ lng: string }> searchParams: Promise<SearchParams>; } export default async function ApprovalTemplatePage(props: PageProps) { + const { lng } = await props.params + const { t } = await useTranslation(lng, 'menu') const searchParams = await props.searchParams; const search = SearchParamsApprovalTemplateCache.parse(searchParams); // getValidFilters 반환값이 undefined 인 경우 폴백 @@ -37,7 +41,7 @@ export default async function ApprovalTemplatePage(props: PageProps) { <div className="flex items-center justify-between space-y-2"> <div> <div className="flex items-center gap-2"> - <h2 className="text-2xl font-bold tracking-tight">결재 템플릿 관리</h2> + <h2 className="text-2xl font-bold tracking-tight">{t('menu.information_system.approval_template')}</h2> </div> </div> </div> @@ -66,4 +70,4 @@ export default async function ApprovalTemplatePage(props: PageProps) { </React.Suspense> </Shell> ); -}
\ No newline at end of file +} diff --git a/app/[lng]/evcp/(evcp)/(system)/change-vendor/page.tsx b/app/[lng]/evcp/(evcp)/(system)/change-vendor/page.tsx index 4b4b0a8d..8b4ba5b5 100644 --- a/app/[lng]/evcp/(evcp)/(system)/change-vendor/page.tsx +++ b/app/[lng]/evcp/(evcp)/(system)/change-vendor/page.tsx @@ -2,6 +2,11 @@ import * as React from 'react'; import { type Metadata } from 'next'; import { Shell } from '@/components/shell'; import { ChangeVendorClient } from './change-vendor-client'; +import { useTranslation } from "@/i18n"; + +interface changeVendorPageProps { + params: Promise<{ lng: string }> +} export const metadata: Metadata = { title: '벤더 변경', @@ -10,15 +15,20 @@ export const metadata: Metadata = { export const dynamic = 'force-dynamic'; -export default async function ChangeVendorPage() { +export default async function ChangeVendorPage({ params }: changeVendorPageProps) { + const { lng } = await params + const { t } = await useTranslation(lng, 'menu') + return ( <Shell className="gap-6"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight">벤더 변경</h2> - <p className="text-muted-foreground"> - 유저를 검색하고 선택한 후, 해당 유저의 벤더를 변경할 수 있습니다. - </p> + <h2 className="text-2xl font-bold tracking-tight"> + {t('menu.information_system.change_vendor')} + </h2> + {/* <p className="text-muted-foreground"> */} + {/* 유저를 검색하고 선택한 후, 해당 유저의 벤더를 변경할 수 있습니다. */} + {/* </p> */} </div> </div> diff --git a/app/[lng]/evcp/(evcp)/(system)/email-log/page.tsx b/app/[lng]/evcp/(evcp)/(system)/email-log/page.tsx index 41001cc7..07699daf 100644 --- a/app/[lng]/evcp/(evcp)/(system)/email-log/page.tsx +++ b/app/[lng]/evcp/(evcp)/(system)/email-log/page.tsx @@ -7,6 +7,7 @@ import { SearchParams } from "@/types/table" import { SearchParamsEmailLogCache } from "@/lib/email-log/validations" import { getEmailLogList } from "@/lib/email-log/service" import { EmailLogTable } from "@/lib/email-log/table/email-log-table" +import { useTranslation } from "@/i18n" export const metadata: Metadata = { title: "이메일 발신 이력 조회", @@ -14,10 +15,13 @@ export const metadata: Metadata = { } interface EmailLogPageProps { + params: Promise<{ lng: string }> searchParams: Promise<SearchParams> } export default async function EmailLogPage(props: EmailLogPageProps) { + const { lng } = await props.params + const { t } = await useTranslation(lng, 'menu') const searchParams = await props.searchParams const search = SearchParamsEmailLogCache.parse(searchParams) @@ -31,7 +35,7 @@ export default async function EmailLogPage(props: EmailLogPageProps) { <div className="flex items-center justify-between space-y-2"> <div> <div className="flex items-center gap-2"> - <h2 className="text-2xl font-bold tracking-tight">이메일 발신 이력 조회</h2> + <h2 className="text-2xl font-bold tracking-tight">{t('menu.information_system.email_log')}</h2> </div> </div> </div> diff --git a/app/[lng]/evcp/(evcp)/(system)/email-template/page.tsx b/app/[lng]/evcp/(evcp)/(system)/email-template/page.tsx index 16c75dab..c4437994 100644 --- a/app/[lng]/evcp/(evcp)/(system)/email-template/page.tsx +++ b/app/[lng]/evcp/(evcp)/(system)/email-template/page.tsx @@ -15,6 +15,7 @@ import { Shell } from "@/components/shell" import { getValidFilters } from "@/lib/data-table"
import { Skeleton } from "@/components/ui/skeleton"
import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton"
+import { useTranslation } from "@/i18n"
export const metadata: Metadata = {
title: "템플릿 관리",
@@ -22,10 +23,14 @@ export const metadata: Metadata = { }
interface TemplatePageProps {
+ params: Promise<{ lng: string }>
searchParams: Promise<SearchParams>
}
export default async function TemplatePage(props: TemplatePageProps) {
+ const { lng } = await props.params
+ const { t } = await useTranslation(lng, 'menu')
+
const searchParams = await props.searchParams
const search = SearchParamsEmailTemplateCache.parse(searchParams)
@@ -48,7 +53,7 @@ export default async function TemplatePage(props: TemplatePageProps) { <div>
<div className="flex items-center gap-2">
<h2 className="text-2xl font-bold tracking-tight">
- 이메일 템플릿 관리
+ {t('menu.information_system.email_template')}
</h2>
{/* <InformationButton pagePath="evcp/equip-class" /> */}
</div>
@@ -73,4 +78,4 @@ export default async function TemplatePage(props: TemplatePageProps) { </React.Suspense>
</Shell>
)
-}
\ No newline at end of file +}
diff --git a/app/[lng]/evcp/(evcp)/(system)/email-whitelist/page.tsx b/app/[lng]/evcp/(evcp)/(system)/email-whitelist/page.tsx index 95abd556..2613ce65 100644 --- a/app/[lng]/evcp/(evcp)/(system)/email-whitelist/page.tsx +++ b/app/[lng]/evcp/(evcp)/(system)/email-whitelist/page.tsx @@ -17,6 +17,7 @@ import { WhitelistTable } from "@/lib/email-whitelist/table/whitelist-table" import { Shell } from "@/components/shell" import { Skeleton } from "@/components/ui/skeleton" import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton" +import { useTranslation } from "@/i18n" // export const metadata: Metadata = { // title: "이메일 화이트리스트 관리", @@ -24,11 +25,13 @@ import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton" // } interface WhitelistPageProps { + params: Promise<{ lng: string }> searchParams: SearchParams } export default async function WhitelistPage(props: WhitelistPageProps) { - + const { lng } = await props.params + const { t } = await useTranslation(lng, 'menu') const searchParams = await props.searchParams // 기본 검색 파라미터 처리 @@ -52,7 +55,7 @@ export default async function WhitelistPage(props: WhitelistPageProps) { <div> <div className="flex items-center gap-2"> <h2 className="text-2xl font-bold tracking-tight"> - 이메일 화이트리스트 관리 + {t('menu.information_system.email_whitelist')} </h2> </div> <p className="text-muted-foreground"> @@ -79,4 +82,4 @@ export default async function WhitelistPage(props: WhitelistPageProps) { </React.Suspense> </Shell> ) -}
\ No newline at end of file +} diff --git a/app/[lng]/evcp/(evcp)/(system)/information/page.tsx b/app/[lng]/evcp/(evcp)/(system)/information/page.tsx index 8a6d348b..ff8c7024 100644 --- a/app/[lng]/evcp/(evcp)/(system)/information/page.tsx +++ b/app/[lng]/evcp/(evcp)/(system)/information/page.tsx @@ -39,7 +39,7 @@ export default async function InformationPage({ params }: InformationPageProps) <div> <div className="flex items-center gap-2"> <h2 className="text-2xl font-bold tracking-tight"> - 안내사항 관리 + {t('menu.information_system.information')} </h2> <InformationButton pagePath="/evcp/information" /> </div> @@ -49,4 +49,4 @@ export default async function InformationPage({ params }: InformationPageProps) <InformationClient initialData={translatedData} /> </Shell> ) -}
\ No newline at end of file +} diff --git a/app/[lng]/evcp/(evcp)/(system)/integration-log/page.tsx b/app/[lng]/evcp/(evcp)/(system)/integration-log/page.tsx index c10a41ea..75796b98 100644 --- a/app/[lng]/evcp/(evcp)/(system)/integration-log/page.tsx +++ b/app/[lng]/evcp/(evcp)/(system)/integration-log/page.tsx @@ -7,12 +7,16 @@ import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton"; import { SearchParamsCache } from "@/lib/integration-log/validations"; import { getIntegrationLogs } from "@/lib/integration-log/service"; import { IntegrationLogTable } from "@/lib/integration-log/table/integration-log-table"; +import { useTranslation } from "@/i18n"; interface IntegrationLogPageProps { + params: Promise<{ lng: string }> searchParams: Promise<SearchParams>; } export default async function IntegrationLogPage(props: IntegrationLogPageProps) { + const { lng } = await props.params + const { t } = await useTranslation(lng, 'menu') const searchParams = await props.searchParams; const search = SearchParamsCache.parse(searchParams); const validFilters = getValidFilters(search.filters); @@ -28,10 +32,9 @@ export default async function IntegrationLogPage(props: IntegrationLogPageProps) <Shell className="gap-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight">인터페이스 이력 조회</h2> - <p className="text-muted-foreground"> - 인터페이스 실행 이력을 조회합니다. 검색, 필터링, 정렬이 가능합니다. - </p> + <h2 className="text-2xl font-bold tracking-tight"> + {t('menu.information_system.integration_log')} + </h2> </div> </div> <React.Suspense fallback={<Skeleton className="h-7 w-52" />}></React.Suspense> @@ -50,4 +53,4 @@ export default async function IntegrationLogPage(props: IntegrationLogPageProps) </React.Suspense> </Shell> ); -}
\ No newline at end of file +} diff --git a/app/[lng]/evcp/(evcp)/(system)/integration/page.tsx b/app/[lng]/evcp/(evcp)/(system)/integration/page.tsx index f2266bca..6aeaf041 100644 --- a/app/[lng]/evcp/(evcp)/(system)/integration/page.tsx +++ b/app/[lng]/evcp/(evcp)/(system)/integration/page.tsx @@ -7,12 +7,16 @@ import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton"; import { SearchParamsCache } from "@/lib/integration/validations"; import { getIntegrations } from "@/lib/integration/service"; import { IntegrationTable } from "@/lib/integration/table/integration-table"; +import { useTranslation } from "@/i18n"; interface IndexPageProps { + params: Promise<{ lng: string }> searchParams: Promise<SearchParams>; } export default async function IndexPage(props: IndexPageProps) { + const { lng } = await props.params + const { t } = await useTranslation(lng, 'menu') const searchParams = await props.searchParams; const search = SearchParamsCache.parse(searchParams); const validFilters = getValidFilters(search.filters); @@ -28,10 +32,9 @@ export default async function IndexPage(props: IndexPageProps) { <Shell className="gap-2"> <div className="flex items-center justify-between space-y-2"> <div> - <h2 className="text-2xl font-bold tracking-tight">인터페이스 관리</h2> - <p className="text-muted-foreground"> - 시스템 인터페이스를 등록, 수정, 삭제할 수 있습니다. - </p> + <h2 className="text-2xl font-bold tracking-tight"> + {t('menu.information_system.integration_list')} + </h2> </div> </div> <React.Suspense fallback={<Skeleton className="h-7 w-52" />}></React.Suspense> @@ -50,4 +53,4 @@ export default async function IndexPage(props: IndexPageProps) { </React.Suspense> </Shell> ); -}
\ No newline at end of file +} diff --git a/app/[lng]/evcp/(evcp)/(system)/login-history/page.tsx b/app/[lng]/evcp/(evcp)/(system)/login-history/page.tsx index dbc8089f..3c3d9255 100644 --- a/app/[lng]/evcp/(evcp)/(system)/login-history/page.tsx +++ b/app/[lng]/evcp/(evcp)/(system)/login-history/page.tsx @@ -9,12 +9,16 @@ import { Shell } from "@/components/shell" import { getLoginSessions } from "@/lib/login-session/service" import { searchParamsCache } from "@/lib/login-session/validation" import { LoginSessionsTable } from "@/lib/login-session/table/login-sessions-table" +import { useTranslation } from "@/i18n" interface LoginHistoryPageProps { + params: Promise<{ lng: string }> searchParams: Promise<SearchParams> } export default async function LoginHistoryPage(props: LoginHistoryPageProps) { + const { lng } = await props.params + const { t } = await useTranslation(lng, 'menu') const searchParams = await props.searchParams const search = searchParamsCache.parse(searchParams) @@ -34,7 +38,7 @@ export default async function LoginHistoryPage(props: LoginHistoryPageProps) { <div> <div className="flex items-center gap-2"> <h2 className="text-2xl font-bold tracking-tight"> - 로그인 세션 이력 + {t('menu.information_system.login_history')} </h2> </div> {/* <p className="text-muted-foreground"> @@ -63,4 +67,4 @@ export default async function LoginHistoryPage(props: LoginHistoryPageProps) { </React.Suspense> </Shell> ) -}
\ No newline at end of file +} diff --git a/app/[lng]/evcp/(evcp)/(system)/menu-access-dept/page.tsx b/app/[lng]/evcp/(evcp)/(system)/menu-access-dept/page.tsx index dfda9172..25c27ada 100644 --- a/app/[lng]/evcp/(evcp)/(system)/menu-access-dept/page.tsx +++ b/app/[lng]/evcp/(evcp)/(system)/menu-access-dept/page.tsx @@ -3,8 +3,16 @@ import { Separator } from "@/components/ui/separator"; import { Shell } from "@/components/shell"; import { DepartmentMenuAccessManager } from "./_components/department-menu-access-manager"; import { getAllDepartmentsTree, getCurrentCompanyInfo } from "@/lib/users/knox-service"; +import { useTranslation } from "@/i18n"; + +interface menuAccessDeptPageProps { + params: Promise<{ lng: string }> +} + +export default async function DepartmentMenuAccessPage({ params }: menuAccessDeptPageProps) { + const { lng } = await params + const { t } = await useTranslation(lng, 'menu') -export default async function DepartmentMenuAccessPage() { // Promise들을 생성하여 클라이언트 컴포넌트에 전달 const departmentsPromise = getAllDepartmentsTree(); const companyInfo = await getCurrentCompanyInfo(); @@ -14,11 +22,13 @@ export default async function DepartmentMenuAccessPage() { <div className="space-y-6"> {/* 헤더 섹션 */} <div className="space-y-2"> - <h1 className="text-2xl font-bold tracking-tight">부서별 메뉴 접근권한 관리</h1> - <p className="text-muted-foreground"> - Knox 조직도를 기반으로 부서별 도메인을 할당하여 메뉴 접근 권한을 관리할 수 있습니다. - 상위 부서를 선택하면 하위 부서들도 자동으로 포함됩니다. - </p> + <h1 className="text-2xl font-bold tracking-tight"> + {t('menu.information_system.menu_access_dept')} + </h1> + {/* <p className="text-muted-foreground"> */} + {/* Knox 조직도를 기반으로 부서별 도메인을 할당하여 메뉴 접근 권한을 관리할 수 있습니다. */} + {/* 상위 부서를 선택하면 하위 부서들도 자동으로 포함됩니다. */} + {/* </p> */} </div> <Separator /> diff --git a/app/[lng]/evcp/(evcp)/(system)/menu-access/page.tsx b/app/[lng]/evcp/(evcp)/(system)/menu-access/page.tsx index 7f5228df..4fa712f1 100644 --- a/app/[lng]/evcp/(evcp)/(system)/menu-access/page.tsx +++ b/app/[lng]/evcp/(evcp)/(system)/menu-access/page.tsx @@ -8,11 +8,15 @@ import { searchParamsUsersCache } from "@/lib/admin-users/validations" import { getUsersNotPartners } from "@/lib/users/service"; import { UserAccessControlTable } from "@/lib/users/access-control/users-table"; import { InformationButton } from "@/components/information/information-button"; +import { useTranslation } from "@/i18n"; interface IndexPageProps { + params: Promise<{ lng: string }> searchParams: Promise<SearchParams>; } export default async function IndexPage(props: IndexPageProps) { + const { lng } = await props.params + const { t } = await useTranslation(lng, 'menu') const searchParams = await props.searchParams; const search = searchParamsUsersCache.parse(searchParams); const validFilters = getValidFilters(search.filters); @@ -29,7 +33,9 @@ export default async function IndexPage(props: IndexPageProps) { <div className="flex items-center justify-between space-y-2"> <div> <div className="flex items-center gap-2"> - <h2 className="text-2xl font-bold tracking-tight">메뉴 접근제어 관리</h2> + <h2 className="text-2xl font-bold tracking-tight"> + {t('menu.information_system.menu_access')} + </h2> <InformationButton pagePath="evcp/menu-access" /> </div> {/* <p className="text-muted-foreground"> @@ -53,4 +59,4 @@ export default async function IndexPage(props: IndexPageProps) { </React.Suspense> </Shell> ); -}
\ No newline at end of file +} diff --git a/app/[lng]/evcp/(evcp)/(system)/menu-list/page.tsx b/app/[lng]/evcp/(evcp)/(system)/menu-list/page.tsx index 5a1f71a5..2cff434e 100644 --- a/app/[lng]/evcp/(evcp)/(system)/menu-list/page.tsx +++ b/app/[lng]/evcp/(evcp)/(system)/menu-list/page.tsx @@ -1,9 +1,7 @@ // app/evcp/menu-list/page.tsx import { Suspense } from "react"; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; -import { Button } from "@/components/ui/button"; -import { RefreshCw, Settings } from "lucide-react"; +import { Card, CardContent } from "@/components/ui/card"; import { getActiveUsers, getMenuAssignments } from "@/lib/menu-list/servcie"; import { InitializeButton } from "@/lib/menu-list/table/initialize-button"; import { MenuListTable } from "@/lib/menu-list/table/menu-list-table"; @@ -42,7 +40,7 @@ export default async function MenuListPage({ params }: MenuListPageProps) { <div> <div className="flex items-center gap-2"> <h2 className="text-2xl font-bold tracking-tight"> - 메뉴 관리 + {t('menu.information_system.menu_list')} </h2> <InformationButton pagePath="evcp/menu-list" /> </div> @@ -61,21 +59,7 @@ export default async function MenuListPage({ params }: MenuListPageProps) { } > <Card> - <CardHeader> - <CardTitle className="flex items-center gap-2"> - <Settings className="h-5 w-5" /> - 메뉴 리스트 - </CardTitle> - <CardDescription> - 시스템의 모든 메뉴와 담당자 정보를 확인할 수 있습니다. - {menusResult.data?.length > 0 && ( - <span className="ml-2 text-sm"> - 총 {menusResult.data.length}개의 메뉴 - </span> - )} - </CardDescription> - </CardHeader> - <CardContent> + <CardContent className="pt-6"> <Suspense fallback={<div className="text-center py-8">로딩 중...</div>}> <MenuListTable initialMenus={translatedMenus} @@ -88,4 +72,4 @@ export default async function MenuListPage({ params }: MenuListPageProps) { </Shell> ); -}
\ No newline at end of file +} diff --git a/app/[lng]/evcp/(evcp)/(system)/notice/page.tsx b/app/[lng]/evcp/(evcp)/(system)/notice/page.tsx index a4157d1b..ab01edfa 100644 --- a/app/[lng]/evcp/(evcp)/(system)/notice/page.tsx +++ b/app/[lng]/evcp/(evcp)/(system)/notice/page.tsx @@ -7,13 +7,21 @@ import { NoticeClient } from "@/components/notice/notice-client" import { InformationButton } from "@/components/information/information-button"
import { getNoticeLists } from "@/lib/notice/service"
import { authOptions } from "@/app/api/auth/[...nextauth]/route"
+import { useTranslation } from "@/i18n"
export const metadata: Metadata = {
title: "공지사항 관리",
description: "페이지별 공지사항을 관리합니다.",
}
-export default async function NoticePage() {
+interface noticePageProps {
+ params: Promise<{ lng: string }>
+}
+
+export default async function NoticePage({ params }: noticePageProps) {
+ const { lng } = await params
+ const { t } = await useTranslation(lng, 'menu')
+
noStore()
// 세션에서 사용자 ID 가져오기
@@ -47,7 +55,7 @@ export default async function NoticePage() { <div>
<div className="flex items-center gap-2">
<h2 className="text-2xl font-bold tracking-tight">
- 공지사항 관리
+ {t('menu.information_system.notice')}
</h2>
<InformationButton pagePath="evcp/notice" />
</div>
@@ -57,4 +65,4 @@ export default async function NoticePage() { <NoticeClient initialData={initialData?.data || []} currentUserId={currentUserId} />
</Shell>
)
-}
\ No newline at end of file +}
diff --git a/app/[lng]/evcp/(evcp)/(system)/page-visits/page.tsx b/app/[lng]/evcp/(evcp)/(system)/page-visits/page.tsx index 07275cad..6b8e4a2a 100644 --- a/app/[lng]/evcp/(evcp)/(system)/page-visits/page.tsx +++ b/app/[lng]/evcp/(evcp)/(system)/page-visits/page.tsx @@ -8,12 +8,16 @@ import { Shell } from "@/components/shell" import { getPageVisits } from "@/lib/page-visits/service" import { searchParamsCache } from "@/lib/page-visits/validation" import { PageVisitsTable } from "@/lib/page-visits/table/page-visits-table" +import { useTranslation } from "@/i18n" interface PageVisitsPageProps { + params: Promise<{ lng: string }> searchParams: Promise<SearchParams> } export default async function PageVisitsPage(props: PageVisitsPageProps) { + const { lng } = await props.params + const { t } = await useTranslation(lng, 'menu') const searchParams = await props.searchParams const search = searchParamsCache.parse(searchParams) @@ -33,7 +37,7 @@ export default async function PageVisitsPage(props: PageVisitsPageProps) { <div> <div className="flex items-center gap-2"> <h2 className="text-2xl font-bold tracking-tight"> - 페이지 방문 이력 + {t('menu.information_system.page_visits')} </h2> </div> {/* <p className="text-muted-foreground"> @@ -58,4 +62,4 @@ export default async function PageVisitsPage(props: PageVisitsPageProps) { </React.Suspense> </Shell> ) -}
\ No newline at end of file +} |
